package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.PropertyCloudServiceCostOrderInfoPO;
import com.itlong.cloud.POJO.VO.property.PropertyCloudServiceCostMessageVO;
import com.itlong.cloud.POJO.VO.property.PropertyCloudServiceCostOrderDataVO;
import com.itlong.cloud.POJO.VO.property.PropertyCloudServiceCostPaymentByPageVO;
import com.itlong.cloud.POJO.VO.property.PropertyCloudServiceCostRecordByPageVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *     云服务费支付业务数据访问接口
 * </desc>
 *
 * @createDate 2019/8/12
 */

@Mapper
@Repository
public interface IPropertyCloudServiceCostDao {

    /**
     * <desc>
     *      获取云服务费续费订单
     * <desc/>
     *
     * @param  projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/8/12
     */
    Map<String,Object> getOrderInfo(@Param("projectId") String projectId);

    /**
     * <desc>
     *      保存
     * </desc>
     *
     * @param params 数据参数
     * @return sql执行行数
     * @author Juguang.S
     * @createDate 2019/8/12
     */
    Integer save(Map<String,Object> params);
    /**
     * <desc>
     *      修改
     * </desc>
     *
     * @param params 数据参数
     * @return 执行行数
     * @author Juguang.S
     * @createDate 2019/8/12
     */
    Integer update(Map<String,Object> params);

    /**
     * <desc>
     *      获取云服务费消息推送列表。
     * <desc/>
     *
     * @param params
     * @return  返回推送消息列表
     * @author Juguang.S
     * @createDate 2019-08-07
     */
    List<PropertyCloudServiceCostRecordByPageVO> getPaymentRecordByPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取云服务费总记录数。
     * <desc/>
     *
     * @param params
     * @return 总记录数
     * @author Juguang.S
     * @createDate 2019-08-07
     */
    Integer getPaymentRecordByPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      检测是否还有未支付的结下账单
     * <desc/>
     *
     * @param  projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/8/21
     */
    Integer getIsBankPayOrder(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取云服务费续费分页信息。
     * <desc/>
     *
     * @param params
     * @return  返回云服务费续费分页信息
     * @author Juguang.S
     * @createDate 2019-11-22
     */
    List<PropertyCloudServiceCostPaymentByPageVO> getPaymentListByPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取云服务费续费总记录数。
     * <desc/>
     *
     * @param params
     * @return  返回云服务费续费总记录数
     * @author Juguang.S
     * @createDate 2019-11-22
     */
    Integer getPaymentByPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取云服务费未支付订单的过期时间 取上一条数据进行计算 无多条批次号复用的情况。
     * <desc/>
     *
     * @param batchNumber
     * @return  返回过期时间
     * @author Juguang.S
     * @createDate 2019-11-22
     */
    String getCloudServiceCostEndTime(@Param("batchNumber") String batchNumber);

    /**
     * <desc>
     *      未支付过期时间取旧批次号过期时间最早的一条已支付的过期时间进行计算 针对有多条复用的情况。
     * <desc/>
     *
     * @param oldBatchNumber
     * @return  返回过期时间
     * @author Juguang.S
     * @createDate 2019-11-22
     */
    String getCloudServiceCostEndTimeBySome(@Param("oldBatchNumber") String[] oldBatchNumber);

    /**
     * <desc>
     *      获取云服务费未续费总记录数。
     * <desc/>
     *
     * @return  返回云服务费未续费总记录数
     * @author Juguang.S
     * @createDate 2019-11-22
     */
    Integer getNotPaymentCount(String projectId);

    /**
     * <desc>
     *      根据订单ID查询订单金额及支付状态
     * <desc/>
     *
     * @param  orderId 订单Id
     * @return
     * @author Juguang.S
     * @createDate 2019/11/25
     */
    PropertyCloudServiceCostOrderInfoPO getOrderAmount(@Param("orderId") String orderId);

    /**
     * <desc>
     *       根据OrderId查询其明细.
     * </desc>
     *
     * @param orderId 订单id
     * @return
     * @author Juguang.S
     * @createDate 2019-11-26
     */
    List<PropertyCloudServiceCostOrderDataVO> getOrderDataInfo(String orderId);

    /**
     * <desc>
     *       根据批次号查询其上次缴费金额.
     * </desc>
     *
     * @param batchNumber 批次号
     * @return
     * @author Juguang.S
     * @createDate 2019-11-27
     */
    String getLastAmountbyBatchNumber(String batchNumber);

    /**
     * <desc>
     *      更新订单下的开票状态
     * <desc/>
     *
     * @param  orderId 订单ID
     * @return
     * @author Juguang.S
     * @createDate 2019/11/29
     */
    Integer updateInvoiceStastus(@Param("orderId") String orderId);
}
